#include <iostream>
#include <unistd.h>
#include <pthread.h>

__thread int g_val = 100;// 只在Linux下有用

void *thread_task(void *args)
{
    // 执行任务
    int num = (long long int)args;
    g_val++;
    std::cout << "thread-" << num << "g_val: " << g_val  << "&g_val: " << &g_val << std::endl;

    return nullptr;
}

int main()
{
    pthread_t tids[3];
    for (int i = 0; i < 3; i++)
    {
        pthread_create(tids+i, nullptr, thread_task, (void *)5);
        sleep(1);
    }

    for(int i = 0; i < 3; i++)
    {
        pthread_join(tids[i], nullptr);
    }

    return 0;
}

// void* thread_task(void* args)
// {
//     // 执行任务
//     int num = (long long int)args;
//     while (num)
//     {
//         std::cout << "new thread.... , num: " << num-- << std::endl;
//         sleep(1);
//     }

//     return nullptr;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr,thread_task, (void*)5);
//     sleep(3);// 这里等待一下，让新的线程跑起来

//     void* ret = nullptr;
//     int n = pthread_join(tid, &ret);
//     std::cout << "main thread... tid: " <<  tid << std::endl;//这里的n是一个非0值，因为分离的线程不允许等待

//     return 0;
// }

// void thread_run(int num)
// {
//     while (num)
//     {
//         std::cout << "thread_1, is run..., num: " << num-- << std::endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     std::thread t(thread_run, 3);
//     while (true)
//     {
//         std:: cout << "main thread..." << std::endl;
//         sleep(1);
//     }
//     t.join();
//     return 0;
// }